A network storage controller is a processing system that is used to store and retrieve data on behalf of one or more clients on a network. A storage controller operates on behalf of one or more clients to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks or tapes. Some storage controllers are designed to service file-level requests from clients, as is commonly the case with file servers used in a network attached storage (NAS) environment. Other storage controllers are designed to service block-level requests from clients, as with storage servers used in a storage area network (SAN) environment. Still other storage controllers are capable of servicing both file-level requests and block-level requests, as is the case with certain storage controllers made by NetApp, Inc. of Sunnyvale, Calif.
In a SAN environment, it is possible to place a storage controller in front of a separate SAN array of mass storage devices, such as disks, where the array is organized as a pool of logical units that can be exported to remote hosts. A “logical unit” is a logical container of data, which is sometimes called a “LUN” (logical unit number). In certain cases a logical unit might not have the native file system format used by the storage controller, such as when the SAN array is from a different vendor than that of the storage controller, or when different products from the same vendor use different file system formats and are deployed in the same system. If a logical unit does not have the native file system format used by the storage controller, it is referred to as a “foreign” logical unit.
In one known system available on the market today, a foreign logical unit can be made usable in the storage controller by reformatting the foreign logical unit on disk with a storage controller specific format and then presenting the reformatted logical unit to remote hosts as native storage from the storage controller. This approach has the advantage of allowing the foreign logical unit to be effectively used, including any storage controller value-added functionality (e.g., snapshotting, mirroring, cloning). However, the foreign logical unit is offline (inaccessible to a client) while the reformatting is being performed. Also, this approach requires that any existing data stored on the foreign logical unit be overwritten or that it be copied to intermediate storage before reformatting and then copied back after reformatting is complete. Overwriting involves undesirable loss of data from the logical unit, while copying out to intermediate storage and then back again is time-consuming and interferes with normal servicing of client requests.
In another application of foreign logical units, the foreign logical unit is utilized in a pass-through mode in the storage controller, where there is one-to-one mapping between the foreign logical unit data and a native logical unit presented from the storage controller. Updates to the native logical unit, if allowed, are passed directly to the foreign logical unit. This approach does not involve reformatting the foreign logical unit to the native file system format. It has the advantage of allowing the foreign logical unit data to be preserved and rapidly presented by the storage controller to the client. However, this approach has the disadvantage that storage controller specific value-added functionality is typically limited or simply inaccessible, since the foreign logical unit is not represented natively in the storage controller.